package es.albarregas.dao;

import java.sql.SQLException;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;

import es.albarregas.pojo.LineaPedido;
import es.albarregas.pojo.Pedido;

public class PedidoDAO extends ConexionDAO {
	
	private static final String INSERT = 
			"insert into pedidos (Fecha,Estado,CodigoCliente) values (?,?,?)";
	private static final String UNREGISTRO = 
			"select NumeroPedido,Fecha,Estado,CodigoCliente from pedidos " +
			"where NumeroPedido=(select max(NumeroPedido) from pedidos)";			
	
	public Pedido crearPedido(Pedido pedido){
		try {
			getConexion();
			preparada = conexion.prepareStatement(INSERT);
									
			Calendar calendario = GregorianCalendar.getInstance();
			java.util.Date fecha = calendario.getTime();
			SimpleDateFormat formatoDeFecha = new SimpleDateFormat("yyyy-MM-dd");
			preparada.setString(1, formatoDeFecha.format(fecha));
			preparada.setString(2, "N");
			preparada.setInt(3, pedido.getCodigoCliente());
			preparada.executeUpdate();
			pedido = leerUnPedido();
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}
	
	public Pedido leerUnPedido(){
		Pedido pedido = new Pedido();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery(UNREGISTRO);
				
			if(resultado.next()){
				
				pedido.setNumeroPedido(resultado.getInt("NumeroPedido"));
				pedido.setFecha(resultado.getString("fecha"));
				pedido.setEstado(resultado.getString("Estado"));
				pedido.setCodigoCliente(resultado.getInt("CodigoCliente"));
				
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}	
	
	public Pedido leerUnPedidoWhere(String clausulaWhere){
		Pedido pedido = new Pedido();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery("select NumeroPedido,fecha, " +
				"Estado,CodigoCliente,BaseImponible ,Descuento,IVA,Direccion,CodigoPostal,Provincia,Localidad,GastosDeEnvio from pedidos " + clausulaWhere);
				
			if(resultado.next()){				
				pedido.setNumeroPedido(resultado.getInt("NumeroPedido"));
				pedido.setFecha(resultado.getString("fecha"));
				pedido.setEstado(resultado.getString("Estado"));
				pedido.setCodigoCliente(resultado.getInt("CodigoCliente"));				
				pedido.setBaseImponible(resultado.getDouble("BaseImponible"));
				pedido.setDescuento(resultado.getDouble("Descuento"));
				pedido.setIva(resultado.getInt("IVA"));
				pedido.setDireccion(resultado.getString("Direccion"));
				pedido.setCodigoPostal(resultado.getString("CodigoPostal"));
				pedido.setProvincia(resultado.getString("Provincia"));
				pedido.setLocalidad(resultado.getString("Localidad"));
				pedido.setGastosDeEnvio(resultado.getDouble("GastosDeEnvio"));
				
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return pedido;
	}	
	public Collection<Pedido> leerPedido(String clausulaWhere){
		Collection<Pedido> lista = new ArrayList<Pedido>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery
				("select NumeroPedido,date_format(Fecha,'%d-%m-%Y') as fecha, " +
				"Estado,CodigoCliente,BaseImponible ,Descuento,IVA,Direccion,CodigoPostal,Provincia,Localidad,GastosDeEnvio from pedidos " + clausulaWhere);
			while(resultado.next()){				
				Pedido pedido = new Pedido();
				pedido.setNumeroPedido(resultado.getInt("NumeroPedido"));
				pedido.setFecha(resultado.getString("fecha"));
				pedido.setEstado(resultado.getString("Estado"));
				pedido.setCodigoCliente(resultado.getInt("CodigoCliente"));				
				pedido.setBaseImponible(resultado.getDouble("BaseImponible"));
				pedido.setDescuento(resultado.getDouble("Descuento"));
				pedido.setIva(resultado.getInt("IVA"));
				pedido.setDireccion(resultado.getString("Direccion"));
				pedido.setCodigoPostal(resultado.getString("CodigoPostal"));
				pedido.setProvincia(resultado.getString("Provincia"));
				pedido.setLocalidad(resultado.getString("Localidad"));
				pedido.setGastosDeEnvio(resultado.getDouble("GastosDeEnvio"));
				lista.add(pedido);
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		System.out.println("Coleccion en udao " + lista.isEmpty());
		return lista;	
	}
	
	public Pedido leerUnPedidoEstadoN(String numeroPedido){
		Pedido pedido = new Pedido();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery
				("select NumeroPedido,date_format(Fecha,'%d-%m-%Y') as fecha, " +
						"Estado,CodigoCliente from pedidos where estado='N'" +
						" and NumeroPedido=" + numeroPedido);
			while(resultado.next()){				
				pedido.setNumeroPedido(resultado.getInt("NumeroPedido"));
				pedido.setFecha(resultado.getString("fecha"));
				pedido.setEstado(resultado.getString("Estado"));
				pedido.setCodigoCliente(resultado.getInt("CodigoCliente"));				
			}
		} catch(SQLException ex){
			ex.printStackTrace();
		} finally {
			cerrar();
		}		
		return pedido;	
	}
	public int updatePedido(Pedido Pedido){
		int codigoSQL = 0;
		String cadenaSQL="UPDATE pedidos SET NumeroPedido = ?, Fecha = ?, Estado = ?, CodigoCliente = ?," +
				" BaseImponible = ?, Descuento = ?, GastosDeEnvio = ?, IVA = ?, Direccion = ?, " +
				"CodigoPostal = ?, Provincia = ?, Localidad = ? WHERE NumeroPedido = ?";		
		try {
			getConexion();
			preparada = conexion.prepareStatement(cadenaSQL);
			preparada.setInt(1, Pedido.getNumeroPedido());
			preparada.setString(2, Pedido.getFecha());			
			preparada.setString(3, Pedido.getEstado());
			preparada.setInt(4, Pedido.getCodigoCliente());
			preparada.setDouble(5, Pedido.getBaseImponible());
			preparada.setDouble(6, Pedido.getDescuento());
			preparada.setDouble(7, Pedido.getGastosDeEnvio());
			preparada.setDouble(8, Pedido.getIva());
			preparada.setString(9, Pedido.getDireccion());
			preparada.setString(10, Pedido.getCodigoPostal());
			preparada.setString(11, Pedido.getProvincia());
			preparada.setString(12, Pedido.getLocalidad());
			preparada.setInt(13, Pedido.getNumeroPedido());	
			
			preparada.executeUpdate();
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return codigoSQL;
	}
	public void BorrarPedido(String clausulaWhere ){
		int codigoSQL = 0;
		try {
			getConexion();			
			String sentenciaSQL="DELETE from pedidos "+clausulaWhere;
			//TODO QUITAR
			System.out.println("Consulta para eliminar pedido -->"+sentenciaSQL);
			estamento = conexion.createStatement();
			estamento.executeUpdate(sentenciaSQL);			
		} catch(SQLException ex){
			codigoSQL = ex.getErrorCode();
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		
	}
	
	
	
	
	
	
	
	
	
}
